package com.LatitudeYao;

/**
 * Created by GTS on 2017/7/17.
 * java的char[]和String都没有结束符这一概念，
 * 是对象的话，字符串肯定就有长度，即然有长度，编译器就可以确定要输出的字符个数，
 * 当然也就没有必要去浪费那1字节的空间用以标明字符串的结束了。
 * 比如，数组对象里有一个属性length,就是数组的长度，String类里面有方法length()可以确定字符串的长度，
 * 因此对于输出函数来说，有直接的大小可以判断字符串的边界，编译器就没必要再去浪费一个空间标识字符串的结束。
 */
class ReplaceSpaceYM{

    public String replaceSpace(StringBuffer str) {
        String stringYM = str.toString();
        String stringYM2 = stringYM.replace(" ","%20");
        return stringYM2;
    }

    public String replaceSpace2(StringBuffer str){
        String stringYM = str.toString();//通过StringBuffer 转换为String
        char charArray[]= stringYM.toCharArray();//String转化为char数组
        int oldLength = stringYM.length();
        int spaceCount = 0;
        for (char i:charArray) {
            if (i==' '){
                spaceCount++;
            }
        }
        int newLength = oldLength + 2 * spaceCount;
        char [] newCharArray = new char[newLength];
        int newIndex = newLength-1;//下标索引是从0开始的
        int oldIndex = oldLength-1;
        while (oldIndex>=0){//从后向前进行替换和移动
            if(charArray[oldIndex]==' '){//是空格，则进行替换，同时索引前移
                newCharArray[newIndex--]='0';
                newCharArray[newIndex--]='2';
                newCharArray[newIndex--]='%';
                oldIndex--;//同时索引前移
            }
            else{//不是空格，则直接保存。索引前移
                newCharArray[newIndex--] = charArray[oldIndex--];
            }
        }
        System.out.println(newCharArray.toString());
        return String.valueOf(newCharArray);
        //return newCHarArray.toString(); 返回的是toString的一个对象 String toString()
        //返回表示此 Character 值的 String 对象
    }
}

public class ReplaceSpace {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("a b c d e ");
        ReplaceSpaceYM  rsym= new ReplaceSpaceYM();
        String str1 = rsym.replaceSpace(sb);
        System.out.println(str1);
        StringBuffer sb2 = new StringBuffer("a b c d e ");
        String str2 = rsym.replaceSpace2(sb2);
        System.out.println(str2);
    }
}
